#Loading the required libraries
library(readxl)
library(dplyr)
Attaching package: 㤼㸱dplyr㤼㸲
The following objects are masked from 㤼㸱package:stats㤼㸲:
filter, lag
The following objects are masked from 㤼㸱package:base㤼㸲:
intersect, setdiff, setequal, union
library(ggplot2)
library(lubridate)
library(randomForest)
randomForest 4.6-14
Type rfNews() to see new features/changes/bug fixes.
Attaching package: 㤼㸱randomForest㤼㸲
The following object is masked from 㤼㸱package:ggplot2㤼㸲:
margin
The following object is masked from 㤼㸱package:dplyr㤼㸲:
combine
library(caTools)
library(DT)
Registered S3 methods overwritten by 'htmltools':
method from
print.html tools:rstudio
print.shiny.tag tools:rstudio
print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
#read the vinted dataset
vData <- read.csv("C:\\Users\\sathy\\OneDrive\\Desktop\\product_ds_hw_data.csv")
head(vData)
#Display the structure of the Vinted Dataset
str(vData)
'data.frame': 553491 obs. of 32 variables:
$ portal : Factor w/ 1 level "fr": 1 1 1 1 1 1 1 1 1 1 ...
$ id : int 1957315772 1969950772 1151604772 1254610772 1295601772 1813580772 1962742772 1207880772 1659889672 1147012772 ...
$ created_at : Factor w/ 469145 levels "2019-07-31 22:00:00",..: 336238 324654 333353 323583 325853 325329 329512 325415 322883 328637 ...
$ user_id : int 110495371 120070572 110561981 110717202 120390572 100987881 100388152 120376851 110260572 110333331 ...
$ listing_price_eur_fixed : num 6 5 25 8 6 20 50 7 13.4 1 ...
$ status : Factor w/ 5 levels "a. New with tags",..: 1 3 2 3 3 1 1 3 1 2 ...
$ sale_time : Factor w/ 124213 levels "2019-07-31 22:19:09",..: 122541 NA 99114 NA NA 81733 53164 NA NA NA ...
$ gmv_eur_fixed : num 4 NA 14.3 NA NA ...
$ brand : Factor w/ 19881 levels "'47 MVP","! Vara",..: 7259 7438 3647 14320 13163 14954 4014 13447 17251 18318 ...
$ brand_is_verified : logi TRUE TRUE TRUE TRUE TRUE FALSE ...
$ declined_at : Factor w/ 11775 levels "2019-07-31 22:23:02",..: NA NA NA NA NA NA NA NA NA NA ...
$ color_primary : Factor w/ 28 levels "APRICOT","BLACK",..: 27 12 2 4 2 NA 2 27 27 3 ...
$ listing_quality_string : Factor w/ 3 levels "Long description",..: NA NA 2 NA 3 3 3 NA NA 3 ...
$ suggested_price_maximum : num 10 2.7 8 4.25 10 NA 50 5 10 3 ...
$ catalog_code_1 : Factor w/ 3 levels "CHILDREN_NEW",..: 3 1 3 1 3 3 3 1 3 1 ...
$ catalog_code_2 : Factor w/ 29 levels "ACCESSORIES_JEWELLERY",..: 29 6 29 6 29 9 29 3 29 6 ...
$ catalog_code_3 : Factor w/ 237 levels "ACCESS_MOBILE",..: 183 157 209 186 204 159 204 185 44 30 ...
$ catalog_code_4 : Factor w/ 389 levels "A_LINE_SKIRTS",..: 186 NA 343 322 384 NA 383 264 298 11 ...
$ catalog_code_5 : Factor w/ 37 levels "34_SLEEVE_SWEATERS",..: NA NA NA NA NA NA NA NA NA NA ...
$ gender : Factor w/ 5 levels "0","1","F","M",..: 3 NA 3 3 NA 3 3 3 3 3 ...
$ country_code : Factor w/ 3 levels "BE","ES","FR": 1 1 3 3 3 3 3 3 2 3 ...
$ lister_nth_listing : int 997 21 241 32 22 39 176 1661 35 47 ...
$ first_listing_local_date : Factor w/ 2112 levels "2013-03-27","2013-03-28",..: 1666 2103 1792 1939 2103 1988 2006 1566 2103 1312 ...
$ listing_platform : Factor w/ 3 levels "android","iphone",..: 1 2 2 1 2 2 2 3 2 2 ...
$ registration_platform : Factor w/ 4 levels "android","iphone",..: 1 2 2 4 2 2 2 3 2 2 ...
$ registration_local_date : Factor w/ 2281 levels "2013-03-23","2013-03-27",..: 1835 2272 1951 2009 2272 1949 2175 1735 2272 1481 ...
$ total_positive_feedback_count : int 93 0 60 27 0 6 91 155 0 20 ...
$ total_negative_feedback_count : int 1 0 1 0 0 0 3 4 0 0 ...
$ window_items_listed : int 801 17 55 12 15 30 162 427 17 0 ...
$ window_items_bought : int 18 0 6 11 0 0 0 5 0 0 ...
$ window_items_sold : int 63 1 19 6 0 6 137 37 0 1 ...
$ listings_in_first_7days_detailed: Factor w/ 9 levels "a. Didn't list over first 7d",..: 3 6 1 1 6 1 5 7 7 2 ...
#Converting the type of Created_at, sale_time and declined_at to date
vData$'created_at' <- as.Date(as.factor(vData$created_at))
vData$'sale_time' <- as.Date(as.factor(vData$sale_time))
vData$'declined_at' <- as.Date(as.factor(vData$declined_at))
#Calculating the time interval using lubricate package
time.interval <- vData$created_at %--% vData$sale_time
vData$sold_period <- as.duration(time.interval) / ddays(1)
vData$sold_period[is.na(vData$sold_period)] <- 0
#Create a feature loss(Cost Price - Selling Price)
vData$loss <- vData$listing_price_eur_fixed - vData$gmv_eur_fixed
#Creating new feature Happy to show if seller was happy & the seller is happy if the item is sold and the loss is zero.
vData$Happy = ifelse(vData$loss>0, "No", "Yes")
#Deriving a class attribute from sold period to say if the item was sold or not
vData$sold = ifelse(vData$sold_period == 0,"No","Yes")
# Print Structure of the Data
summary(vData)
portal id created_at user_id
fr:553491 Min. :1.032e+08 Min. :2019-07-31 Min. : 1202
1st Qu.:1.250e+09 1st Qu.:2019-08-10 1st Qu.:100559632
Median :1.500e+09 Median :2019-08-18 Median :110371451
Mean :1.500e+09 Mean :2019-08-16 Mean :102119640
3rd Qu.:1.750e+09 3rd Qu.:2019-08-25 3rd Qu.:120194452
Max. :2.000e+09 Max. :2019-08-31 Max. :120999902
listing_price_eur_fixed status sale_time
Min. : 0.00 a. New with tags: 50107 Min. :2019-07-31
1st Qu.: 3.00 b. New : 91720 1st Qu.:2019-08-16
Median : 5.00 c. Mint :316090 Median :2019-08-26
Mean : 13.61 d. Very good : 85553 Mean :2019-08-29
3rd Qu.: 12.00 e. Good : 10021 3rd Qu.:2019-09-06
Max. :9000.00 Max. :2019-10-30
NA's :393486
gmv_eur_fixed brand brand_is_verified declined_at
Min. : 0.0 Zara : 21331 Mode :logical Min. :2019-07-31
1st Qu.: 2.5 H&M : 17802 FALSE:179081 1st Qu.:2019-08-11
Median : 5.0 Kiabi : 17676 TRUE :374410 Median :2019-08-19
Mean : 11.9 Nike : 10189 Mean :2019-08-19
3rd Qu.: 11.5 Adidas : 8283 3rd Qu.:2019-08-26
Max. :8999.0 (Other):358359 Max. :2019-10-30
NA's :393486 NA's :119851 NA's :538586
color_primary listing_quality_string
BLACK :128527 Long description : 48365
BLUE : 58412 Long description, More than 2 photos: 67262
GREY : 53302 More than 2 photos :168990
WHITE : 48430 NA's :268874
PINK : 25824
(Other):201124
NA's : 37872
suggested_price_maximum catalog_code_1 catalog_code_2
Min. : 0.86 CHILDREN_NEW:198687 WOMENS :219740
1st Qu.: 3.64 MENS : 53281 GIRLS_NEW : 84023
Median : 5.00 WOMEN_ROOT :301523 BOYS_NEW : 67658
Mean : 9.77 FOOTWEAR : 33119
3rd Qu.: 10.00 ACCESSORIES_JEWELLERY: 25291
Max. :520.00 TOYS_AND_GAMES_NEW : 20558
NA's :139351 (Other) :103102
catalog_code_3 catalog_code_4 catalog_code_5
TOPS_T_SHIRTS : 69207 WOM_TOP_T_SHIRTS: 18245 W_LIGHTWEIGT_JACKETS: 3887
DRESSES : 40364 SUMMER_DRESSES : 11623 W_SWEATERS : 2296
PULLOVERS_SWEATERS: 17184 TOPS_GIRLS_NEW : 9609 KNITTED_SWEATERS : 2201
COATS_JACKETS : 16781 W_JACKETS : 9577 LEATHER_JACKETS : 1922
BOYS_SHIRTS : 14853 TSHIRTS_BOYS_NEW: 9309 PARTY_DRESSES : 1895
(Other) :389313 (Other) :386339 (Other) : 13996
NA's : 5789 NA's :108789 NA's :527294
gender country_code lister_nth_listing first_listing_local_date
0 : 3 BE: 48874 Min. : 1.0 2019-08-18: 5382
1 : 60 ES: 23795 1st Qu.: 24.0 2019-08-11: 5016
F :491901 FR:480822 Median : 79.0 2019-08-25: 4730
M : 30379 Mean : 269.1 2019-08-12: 4629
O : 525 3rd Qu.: 234.0 2019-08-15: 4464
NA's: 30623 Max. :9883.0 2019-08-20: 4274
(Other) :524996
listing_platform registration_platform
android :245554 android :196879
iphone :258894 iphone :217151
web (desktop or other): 49043 mobile web : 49068
web (desktop or other): 90393
registration_local_date total_positive_feedback_count total_negative_feedback_count
2019-08-11: 2984 Min. : 0.00 Min. : 0.000
2019-08-25: 2858 1st Qu.: 1.00 1st Qu.: 0.000
2019-08-18: 2767 Median : 12.00 Median : 0.000
2019-08-10: 2666 Mean : 56.76 Mean : 1.215
2019-08-14: 2645 3rd Qu.: 51.00 3rd Qu.: 1.000
2019-08-12: 2573 Max. :3621.00 Max. :108.000
(Other) :536998
window_items_listed window_items_bought window_items_sold
Min. : 0.00 Min. : 0.000 Min. : 0.00
1st Qu.: 3.00 1st Qu.: 0.000 1st Qu.: 0.00
Median : 23.00 Median : 1.000 Median : 4.00
Mean : 79.11 Mean : 6.601 Mean : 15.09
3rd Qu.: 74.00 3rd Qu.: 6.000 3rd Qu.: 15.00
Max. :2676.00 Max. :684.000 Max. :774.00
listings_in_first_7days_detailed sold_period loss
a. Didn't list over first 7d:264575 Min. : 0.000 Min. :-1000.0
c. 2-5 listings : 64431 1st Qu.: 0.000 1st Qu.: 0.0
f. 21-50 listings : 57305 Median : 0.000 Median : 0.3
e. 11-20 listings : 50474 Mean : 3.721 Mean : 2.0
d. 6-10 listings : 46104 3rd Qu.: 0.000 3rd Qu.: 2.0
b. 1 listing : 33501 Max. :90.000 Max. : 3670.0
(Other) : 37101 NA's :393486
Happy sold
Length:553491 Length:553491
Class :character Class :character
Mode :character Mode :character
#Plot Proportion of items with respect to Status
ggplot(vData, aes(status))+
geom_bar(aes(fill = status))+
scale_x_discrete(labels= c("New with tags", "New", "Satisfactory","Very Good","Good"))+
scale_y_discrete()+
ggtitle("Proportion of Items listed with specific status")+
theme(legend.position = "none")
##The items having satisfactory status are listed more compared to other status.
genders <- filter(vData, gender == "M" | gender == "F" | gender == "O")
ggplot(genders, aes(gender))+
geom_bar(aes(fill = gender))+
ggtitle("Proportion of seller based on Gender")+
theme(axis.text.y = element_blank(),legend.position = "none")
##The Count of Female sellers are more than male and others.
#Creating a table to summarize data with respect to country
country <- vData %>% group_by(country_code) %>%
dplyr::summarise(Total = n())
`summarise()` ungrouping output (override with `.groups` argument)
datatable(country)
#Plot pie plot to show the proportion of sellers in country
ggplot(country, aes(x = "",y = Total,fill = country_code))+
geom_bar(stat="identity", width=1,color="black")+
coord_polar("y", start=0)+
ggtitle("Proportion of Seller based on Country")+
theme_void()+
scale_fill_brewer(palette="Set2")
##The percentage of sellers are more in France compared to other two country.
#Create a subset of vinted data with colour and sold period attribute
dt1 <- subset(vData, select = c(status,sold_period))
dt1 <- na.omit(dt1)
#Creating a table by grouping status and summarizing the mean window period
dt1 <- dt1 %>%
group_by(status) %>%
dplyr::summarise(MeanPeriod = mean(sold_period))
`summarise()` ungrouping output (override with `.groups` argument)
datatable(dt1)
#Plot the mean window period between item posted date and sold date
plot(dt1,main = "The Mean Window Period between item posted and sold")
##The plot depicts that the new items with tags sold are having more window period when compared to other status. ##This can be due to the high rate, as new products are better than second hand product though it as tag, and it would certainly have the same price. ##Further, The good and very good items are are sold with less window period.
#Create a subset of vinted data with colour and sold period attribute
dt2 <- subset(vData, select = c(color_primary,sold_period))
dt2 <- na.omit(dt2)
#Creating the datable with above subset data
dt2 <- dt2 %>%
group_by(color_primary) %>%
dplyr::summarise(MeanPeriod = mean(sold_period))
`summarise()` ungrouping output (override with `.groups` argument)
datatable(dt2)
#Plot the window period with respect to colour
ggplot(dt2,aes(color_primary,MeanPeriod,color = color_primary))+
geom_point()+
theme(axis.text.x = element_text(angle = 90))+
theme(legend.position = "none")
##As the plot depicts, the basic colours like blue, green , red , white , yellow etc,. are having less window period when compared to colours like burgandy , brown, purple and lilac.
#Creating a subset of Vinted data
vvData <- subset(vData, select = -c(portal,declined_at,first_listing_local_date,registration_platform,registration_local_date,window_items_listed,window_items_bought,window_items_sold,listings_in_first_7days_detailed,loss))
vvData <- na.omit(vvData)
#remove NA values
dim(vvData)
[1] 3907 26
#Plot status and group by sold or not
ggplot(vvData,aes(status))+
geom_bar(aes(fill=sold))
##The plot shows that the satisfactory(mint) items are listed and sold in large proportion when compared to other items. And new items with tags and good items are having very less proportion of items not sold. Status is not having much impact accopording to the plot
#Plot Status grouped by Happy or not
ggplot(vvData,aes(status))+
geom_bar(aes(fill=Happy))+
ggtitle("Count of Status grouped by Happy or Not")
##The graph emphasises that every status is facing greater than or equal to 50 percent loss. which means it is sold lesser than the listed price.
#Plot listing quality string grouped by sold or not
ggplot(vData,aes(listing_quality_string, xlab = " Quality of string listed"))+
geom_bar(aes(fill=sold))+
ggtitle("Count of Items based on quality of listed string")+
scale_x_discrete(labels = c("Long Description", "Long Description with more than 2 photos", "More than 2 photos", "No Descrition"))+
theme(axis.text.x = element_text(angle = 90))+
scale_y_discrete()
##The graph proves that the item with no description are having less chances to be sold. The items with long descriotion and more than 2 photos have comparitively high sold rate.
#Plot items count based on catalog category 1
ggplot(vData,aes(catalog_code_1))+
theme(axis.text.x = element_text(angle = 90))+
geom_bar(aes(fill=sold))
#Plot items count based on catalog category 2
ggplot(vData,aes(catalog_code_2))+
theme(axis.text.x = element_text(angle = 90))+
geom_bar(aes(fill=sold))
#Plot items count based on catalog category 3
ggplot(vvData,aes(catalog_code_3))+
theme(axis.text.x = element_text(angle = 90))+
geom_bar(aes(fill=sold))
#Plot items count based on catalog category 4
ggplot(vvData,aes(catalog_code_4))+
theme(axis.text.x = element_text(angle = 90))+
geom_bar(aes(fill=sold))
#Plot items count based on catalog category 5
ggplot(vvData,aes(catalog_code_5))+
theme(axis.text.x = element_text(angle = 90))+
geom_bar(aes(fill=sold))
##Most of the sellers are women as depicted from past graphs. Here we see most of the women _root items are not sold. Though men wear has less listings, the sold rate is nearly equal to women and children wear which is around 25 percent.
#Create a subset of data to find if seller is HAPPY or NOT
newData <- subset(vData, select = -c(portal,id,sale_time, declined_at,first_listing_local_date,registration_platform,registration_local_date,window_items_listed,window_items_bought,window_items_sold,listings_in_first_7days_detailed,loss,sold))
#Remove NA values
newData <- na.omit(newData)
#Type conversion
newData$Happy <- as.factor(as.character(newData$Happy))
newData$status <- as.integer(as.factor(newData$status))
newData$brand <- as.integer(as.factor(newData$brand))
newData$brand_is_verified <- as.integer(as.factor(newData$brand_is_verified))
newData$listing_quality_string <- as.integer(as.factor(newData$listing_quality_string))
newData$catalog_code_1 <- as.integer(as.factor(newData$catalog_code_1))
newData$catalog_code_2 <- as.integer(as.factor(newData$catalog_code_2))
newData$catalog_code_3 <- as.integer(as.factor(newData$catalog_code_3))
newData$catalog_code_4 <- as.integer(as.factor(newData$catalog_code_4))
newData$catalog_code_5 <- as.integer(as.factor(newData$catalog_code_5))
newData$listing_platform <- as.integer(as.factor(newData$listing_platform))
newData$gender <- as.integer(as.factor(newData$gender))
newData$color_primary <- as.integer(as.factor(newData$color_primary))
newData$country_code <- as.integer(as.factor(newData$country_code))
#Print Summary of new subset data
summary(newData)
created_at user_id listing_price_eur_fixed status
Min. :2019-07-31 Min. : 10035 Min. : 0.00 Min. :1.000
1st Qu.:2019-08-11 1st Qu.:100465451 1st Qu.: 6.00 1st Qu.:3.000
Median :2019-08-18 Median :110266831 Median : 11.00 Median :3.000
Mean :2019-08-17 Mean : 97211181 Mean : 21.75 Mean :2.856
3rd Qu.:2019-08-25 3rd Qu.:120095071 3rd Qu.: 25.00 3rd Qu.:3.000
Max. :2019-08-31 Max. :120996822 Max. :2220.00 Max. :5.000
gmv_eur_fixed brand brand_is_verified color_primary
Min. : 0.0388 Min. : 4 Min. :1.000 Min. : 2.000
1st Qu.: 5.0000 1st Qu.: 5476 1st Qu.:2.000 1st Qu.: 2.000
Median : 10.0000 Median :10334 Median :2.000 Median : 5.000
Mean : 18.2342 Mean :10612 Mean :1.936 Mean : 9.947
3rd Qu.: 20.0000 3rd Qu.:15131 3rd Qu.:2.000 3rd Qu.:18.000
Max. :2100.0000 Max. :19850 Max. :2.000 Max. :28.000
listing_quality_string suggested_price_maximum catalog_code_1 catalog_code_2
Min. :1.000 Min. : 2.40 Min. :3 Min. :29
1st Qu.:2.000 1st Qu.: 5.00 1st Qu.:3 1st Qu.:29
Median :3.000 Median : 8.00 Median :3 Median :29
Mean :2.492 Mean : 11.09 Mean :3 Mean :29
3rd Qu.:3.000 3rd Qu.: 11.04 3rd Qu.:3 3rd Qu.:29
Max. :3.000 Max. :269.00 Max. :3 Max. :29
catalog_code_3 catalog_code_4 catalog_code_5 gender country_code
Min. : 38.00 Min. :156.0 Min. : 1.00 Min. :2.000 Min. :1.000
1st Qu.: 38.00 1st Qu.:329.0 1st Qu.:10.00 1st Qu.:3.000 1st Qu.:3.000
Median : 38.00 Median :333.0 Median :18.00 Median :3.000 Median :3.000
Mean : 71.85 Mean :319.5 Mean :20.16 Mean :3.016 Mean :2.778
3rd Qu.:169.00 3rd Qu.:335.0 3rd Qu.:30.50 3rd Qu.:3.000 3rd Qu.:3.000
Max. :192.00 Max. :373.0 Max. :37.00 Max. :5.000 Max. :3.000
lister_nth_listing listing_platform total_positive_feedback_count
Min. : 1.0 Min. :1.000 Min. : 0.0
1st Qu.: 28.0 1st Qu.:1.000 1st Qu.: 3.0
Median : 78.0 Median :2.000 Median : 17.0
Mean : 291.8 Mean :1.706 Mean : 109.1
3rd Qu.: 212.0 3rd Qu.:2.000 3rd Qu.: 65.0
Max. :9868.0 Max. :3.000 Max. :3557.0
total_negative_feedback_count sold_period Happy
Min. : 0.000 Min. : 0.00 No :2308
1st Qu.: 0.000 1st Qu.: 1.00 Yes:1599
Median : 0.000 Median : 7.00
Mean : 1.944 Mean :15.85
3rd Qu.: 1.000 3rd Qu.:25.00
Max. :71.000 Max. :88.00
#Split the data into train and test set
sample = sample.split(newData$Happy, SplitRatio = .70)
train = subset(newData, sample == TRUE)
test = subset(newData, sample == FALSE)
#Train the model using train data
rf <- randomForest(Happy ~ ., data=train)
rf
Call:
randomForest(formula = Happy ~ ., data = train)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 4
OOB estimate of error rate: 20.33%
Confusion matrix:
No Yes class.error
No 1446 170 0.1051980
Yes 386 733 0.3449508
#Plot the Random Forest Error
plot(rf, main = "Random Forest Error")
#Plot the Variable Importance Plot
varImpPlot(rf, bg = "skyblue", main = "Variable Importance Plot in terms of HAPPY or NOT")
##The listing price,deal accepeted price, sold period, the positive feedcount plays a major role in deciding if the seller was HAPPY or NOT.
#Create a subet of data to classify if Items where SOLD or NOT
sData <- subset(vData, select = -c(portal,declined_at,first_listing_local_date,registration_platform,registration_local_date,window_items_listed,window_items_bought,window_items_sold,listings_in_first_7days_detailed,loss,id,created_at,sale_time,sold_period,Happy))
#remove na values
sData <- na.omit(sData)
#type conversions
sData$sold <- as.factor(as.character(sData$sold))
sData$status <- as.integer(as.factor(sData$status))
sData$brand <- as.integer(as.factor(sData$brand))
sData$brand_is_verified <- as.integer(as.factor(sData$brand_is_verified))
sData$listing_quality_string <- as.integer(as.factor(sData$listing_quality_string))
sData$catalog_code_1 <- as.integer(as.factor(sData$catalog_code_1))
sData$catalog_code_2 <- as.integer(as.factor(sData$catalog_code_2))
sData$catalog_code_3 <- as.integer(as.factor(sData$catalog_code_3))
sData$catalog_code_4 <- as.integer(as.factor(sData$catalog_code_4))
sData$catalog_code_5 <- as.integer(as.factor(sData$catalog_code_5))
sData$listing_platform <- as.integer(as.factor(sData$listing_platform))
sData$gender <- as.integer(as.factor(sData$gender))
sData$color_primary <- as.integer(as.factor(sData$color_primary))
sData$country_code <- as.integer(as.factor(sData$country_code))
#split the data into train and test set
sample = sample.split(sData$sold, SplitRatio = .70)
train = subset(sData, sample == TRUE)
test = subset(sData, sample == FALSE)
#train the model
rf2 <- randomForest(sold ~ ., data=train)
#plot the variable importance plot
varImpPlot(rf2,bg = "skyblue", main = "Variable Importance Plot in terms of SOLD or NOT")
##The Experience(lister_nth_listing), total positive feedback count, the cost price and brand are the Primary factors which decided if the item was sold or not. The secondary factors are the catalog category, color, negative feedback count, status and quality of listing string.
##############################################################################################Therefore, The seller must maintain a good feedback record, mention a genuine price. It would be appreciated if teh seller can give long description with more than 2 photos. This way the liquidity can be increased.
Thank You